package com.mine.frame.common.utils

import androidx.collection.ArrayMap
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.disposables.Disposable

/**
 * company 广东玛格家居有限公司
 * @author smoker
 * @Date 2021/11/12
 * Description: Rxjava 订阅统一管理
 */
class DisposableUtils private constructor(){

    companion object{
        val instance =
            DisposableUtilsHolder.util
    }

    private object DisposableUtilsHolder{
        val util = DisposableUtils()
    }

    /**
     * 保存请求的Disposable
     */
    private var requestTag = ArrayMap<Any, CompositeDisposable>()

    init {
        requestTag.clear()
    }


    /**
     * 添加一个请求记录
     */
    fun add(tag: Any, disposable: Disposable) {
        requestTag[tag]?.add(disposable).let {
            val comDisposable = CompositeDisposable()
            comDisposable.add(disposable)
            requestTag[tag] = comDisposable
        }
    }


    /**
     * 移除tag请求记录
     * 并处理这个请求
     */
    fun remove(tag: Any) {
        if (!requestTag.isEmpty) {
            requestTag.remove(tag)?.let {
                if (!it.isDisposed){
                    it.dispose()
                }
            }
        }
    }

    /**
     * 移除所有请求记录
     */
    fun removeAll() {
        if (!requestTag.isEmpty) {
           requestTag.forEach {entry ->
                if (!entry.value.isDisposed){
                    entry.value.dispose()
                }
           }
            requestTag.clear()
        }
    }


}